The ability to add/upgrade functionality to a peripheral device such as a printer has been widely proposed and is reasonably well understood in the art. In general, upgrading of printer functionality has involved adding or exchanging software/hardware such as upgrading firmware that contains new software content for use by the printer. Manufacturers and third party developers desire the ability to add functionality to a printer by upgrading printer firmware after the printer has left the assembly line, and possibly while the printer is in a customer's possession.
One early technique for upgrading functionality to a printer involved the use of a font cartridge with a printer such as an HP Laserjet II printer. A typical font cartridge printer contained fonts already built into the printer, as soft fonts, which reside on a hard disk built into the printer or on a hard disk of an associated computer. The font cartridge was a plug-in module containing a ROM chip that stored one or several sets of additional bitmapped or outline fonts for one or more typefaces. Each cartridge contained a specific set of fonts stored in the ROM chip. When a user desired a new font, a new plug-in cartridge containing the desired font was merely plugged into a receiving slot on the printer. However, such upgrades were limited merely to changing the set of type characters capable of being produced by a printer.
Subsequent generations of printers, for example, later generations of HP Laserjet printers, have used one of several systems for extending the print features and functionality of a printer. One system involves running code out of an installed ROM. Such a such system utilizes a print formatter having a Single In-line Memory Module (SIMM) socket. Memory in the form of ROM contained on the SIMM, comprising a ROM SIMM, extends the features of the printer when a user plugs a ROM SIMM into the SIMM socket. The ROM SIMM contains both executable code and associated data. The code is then actually executed from the installed ROM. By running the code directly out of the ROM, the formatter RAM requirements for the printer are reduced. Additionally, the loading/unloading of a ROM SIMM is well within the capabilities of an end user, since all that is required is the installation of a ROM SIMM in an available SIMM socket on the print formatter. However, the implementation of a ROM SIMM and SIMM socket increases the complexity of the printer firmware. Furthermore, a complex algorithm, such as Position Independent Code/Position Independent Data (PIC/PID) manager, is needed in order to run the code directly out of ROM. Hence, the cost and complexity of the printer are increased.
Another system involves placing executable code and data on a hard disk of an accessory disk drive provided on the printer. The code is executed by copying the code from the hard disk and placing it into RAM on the print formatter. In one implementation, the code is packaged as a relocatable object file format (ROFF) entity. By packaging the code as a ROFF entity, the need for complex algorithms such a PIC/PID are eliminated. However, the RAM requirements for the formatter are increased, which increases overall cost and complexity. Additionally, packaging of the code into a ROFF entity requires the use of proprietary tools which can only be obtained from the manufacturer. Even further, a loader comprising a complex algorithm has to be added to the printer firmware to enable loading of the code into RAM. Finally, administration of a dedicated hard drive on the printer creates an additional layer of complexity for a user.
Yet another system involves providing a FLASH ROM on the printer. The FLASH ROM allows a user to increase or update the executable code present on an embedded device or printer. Typically, a user updates the FLASH ROM with one or more utility programs. Most PC BIOS's are configured to use this system. However, FLASH ROM's are expensive which makes this system impractical and cost prohibitive for printers.